package alg20241018;

public class Text3 {
    public int tribonacci(int n) {
        //1.创建dp表
        //2.初始化dp表
        //3.填表
        //4.返回值
        if(n == 0) return 0;
        if(n == 1 || n == 2) return 1;

        int[] dp = new int[n+1];
        dp[0] = 0;
        dp[1] = 1;
        dp[2] = 1;
        for (int i = 3; i <= n; i++) {
            dp[i] = dp[i-3] + dp[i-2] + dp[i-1];
        }
        return dp[n];
    }
    //空间优化版
    public int tribonacci1(int n) {
        //1.创建dp表
        //2.初始化dp表
        //3.填表
        //4.返回值
        if(n == 0) return 0;
        if(n == 1 || n == 2) return 1;
        //用滚动数组记录 状态  使空间复杂度有on 变o1
        int a = 0, b = 1, c = 1;
        int d = 0;

        for (int i = 3; i <= n; i++) {
            d = a + b + c;
            a = b;
            b = c;
            c = d;
        }
        return d;
    }
}
